'use strict'

let
    // 引入 fs 模块 用于读取文件
    fs = require('fs'),
    // 引入 自定义 db  用于重构 sequelize.sync() 方法
    { sequelize } = require('../db');


// 查找所有 model 文件
function searchModel() {
    // 读取当前路径下的所有 文件 
    let files = fs.readdirSync(__dirname);
    // 筛选 除 index.js 外 的所有 model 文件
    let modelFile = files.filter(filename => {
        return filename.endsWith('.js') && filename !== 'index.js'
    });
    // 返回 筛选完的
    return modelFile
};


// 注册所有 model 文件
function registerModel(files) {
    // 定义成对象 方便使用
    let obj = {}
    files.forEach(fileName => {
        // 获取 model文件的名字 
        let modelName = fileName.substring(0, fileName.length - 3);
        // 把获取到的model名字作为属性 并 把找到的model文件作为属性值赋值给属性
        obj[modelName] = require(__dirname + '/' + fileName);
    });
    // 返回 所有 model 文件
    return obj
};

let
    // 获取 所有 筛选完的 model文件
    files = searchModel(),
    // 注册 所有 筛选完的 model 文件
    obj = registerModel(files);
    
// 给 obj 重构一个 sync 的方法 方便使用
obj.sync = async (obj = { force: true }) => {
    // 同步数据库
    return sequelize.sync(obj);
};

// 暴露 obj 对象
module.exports = obj;